home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume5 / pc-curses-1.3 / part2 < prev    next >
Encoding:
Internet Message Format  |  1989-02-03  |  57.4 KB

  1. Path: xanth!nic.MR.NET!hal!ncoast!allbery
  2. From: creps@silver.bacs.indiana.edu (Steve Creps)
  3. Newsgroups: comp.sources.misc
  4. Subject: v05i024: PCcurses version 1.3, part 2/5
  5. Message-ID: <2566@silver.bacs.indiana.edu>
  6. Date: 31 Oct 88 02:51:25 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: creps@silver.bacs.indiana.edu (Steve Creps)
  9. Organization: IU CS Dept
  10. Lines: 1791
  11. Approved: allbery@ncoast.UUCP
  12.  
  13. Posting-number: Volume 5, Issue 24
  14. Submitted-by: "Steve Creps" <creps@silver.bacs.indiana.edu>
  15. Archive-name: pc-curses-1.3/Part2
  16.  
  17. #! /bin/sh
  18. # This is a shell archive.  Remove anything before this line, then unpack
  19. # it by saving it into a file and typing "sh file".  To overwrite existing
  20. # files, type "sh file -c".  You can also feed this as standard input via
  21. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  22. # will see the following message at the end:
  23. #        "End of archive 2 (of 5)."
  24. # Contents:  attrib.c boxes.c chardel.c charins.c clrtobot.c clrtoeol.c
  25. #   curspriv.h linedel.c lineins.c options.c overlay.c refresh.c
  26. #   setmode.c setterm.c
  27. # Wrapped by creps@silver on Fri Oct 28 17:43:07 1988
  28. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  29. if test -f 'attrib.c' -a "${1}" != "-c" ; then 
  30.   echo shar: Will not clobber existing file \"'attrib.c'\"
  31. else
  32. echo shar: Extracting \"'attrib.c'\" \(3805 characters\)
  33. sed "s/^X//" >'attrib.c' <<'END_OF_FILE'
  34. X/****************************************************************/
  35. X/* Character attribute routines of the PCcurses package        */
  36. X/*                                */
  37. X/****************************************************************/
  38. X/* This version of curses is based on ncurses, a curses version    */
  39. X/* originally written by Pavel Curtis at Cornell University.    */
  40. X/* I have made substantial changes to make it run on IBM PC's,    */
  41. X/* and therefore consider myself free make it public domain.    */
  42. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  43. X/****************************************************************/
  44. X/* 1.0:    Release:                    870515    */
  45. X/* 1.2:    Rcsid[] string for maintenance:            881002    */
  46. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  47. X/****************************************************************/
  48. X
  49. X#include <curses.h>
  50. X#include <curspriv.h>
  51. X
  52. Xchar _curses_attrib_rcsid[] = "@(#)attrib.c v1.3 - 881005";
  53. X
  54. X/****************************************************************/
  55. X/* Wattrset() sets the attributes as specified in window 'win'.    */
  56. X/****************************************************************/
  57. X
  58. Xvoid wattrset(win,attrs)
  59. X  WINDOW    *win;
  60. X  int         attrs;
  61. X  {
  62. X  win->_attrs = attrs & ATR_MSK;
  63. X  } /* wattrset */
  64. X
  65. X/****************************************************************/
  66. X/* Wattron() sets the specified attribute(s) in window 'win'.    */
  67. X/****************************************************************/
  68. X
  69. Xvoid    wattron(win,attrs)
  70. X  WINDOW    *win;
  71. X  int         attrs;
  72. X  {
  73. X  win->_attrs |= (attrs & ATR_MSK);
  74. X  } /* wattron */
  75. X
  76. X/****************************************************************/
  77. X/* Wattroff() clears the specified attribute(s) in window    */
  78. X/* 'win'.                            */
  79. X/****************************************************************/
  80. X
  81. Xvoid    wattroff(win,attrs)
  82. X  WINDOW    *win;
  83. X  int         attrs;
  84. X  {
  85. X  win->_attrs &= (~attrs & ATR_MSK);
  86. X  } /* wattroff */
  87. X
  88. X/****************************************************************/
  89. X/* Wstandout() starts standout mode in window 'win'.        */
  90. X/****************************************************************/
  91. X
  92. Xvoid    wstandout(win)
  93. X  WINDOW    *win;
  94. X  {
  95. X  win->_attrs = A_STANDOUT;
  96. X  } /* wstandout */
  97. X
  98. X/****************************************************************/
  99. X/* Wstandend() clears all special attributes in window 'win'.    */
  100. X/****************************************************************/
  101. X
  102. Xvoid    wstandend(win)
  103. X  WINDOW    *win;
  104. X  {
  105. X  win->_attrs = ATR_NRM;
  106. X  } /* wstandend */
  107. X
  108. X/****************************************************************/
  109. X/* Attrset() sets the attributes as specified in stdscr.    */
  110. X/****************************************************************/
  111. X
  112. Xvoid    attrset(attrs)
  113. X  int attrs;
  114. X  {
  115. X  stdscr->_attrs = attrs & ATR_MSK;
  116. X  } /* attrset */
  117. X
  118. X/****************************************************************/
  119. X/* Attron() sets the specified attribute(s) in stdscr.        */
  120. X/****************************************************************/
  121. X
  122. Xvoid    attron(attrs)
  123. X  int         attrs;
  124. X  {
  125. X  stdscr->_attrs |= (attrs & ATR_MSK);
  126. X  } /* attron */
  127. X
  128. X/****************************************************************/
  129. X/* Attroff() clears the specified attribute(s) in stdscr.    */
  130. X/****************************************************************/
  131. X
  132. Xvoid    attroff(attrs)
  133. X  int         attrs;
  134. X  {
  135. X  stdscr->_attrs &= (~attrs & ATR_MSK);
  136. X  } /* attroff */
  137. X
  138. X/****************************************************************/
  139. X/* Standout() starts standout mode in stdscr.            */
  140. X/****************************************************************/
  141. X
  142. Xvoid    standout()
  143. X  {
  144. X  stdscr->_attrs = A_STANDOUT;
  145. X  } /* standout */
  146. X
  147. X/****************************************************************/
  148. X/* Standend() clears all special attributes in stdscr.        */
  149. X/****************************************************************/
  150. X
  151. Xvoid    standend()
  152. X  {
  153. X  stdscr->_attrs = ATR_NRM;
  154. X  } /* standend */
  155. END_OF_FILE
  156. if test 3805 -ne `wc -c <'attrib.c'`; then
  157.     echo shar: \"'attrib.c'\" unpacked with wrong size!
  158. fi
  159. # end of 'attrib.c'
  160. fi
  161. if test -f 'boxes.c' -a "${1}" != "-c" ; then 
  162.   echo shar: Will not clobber existing file \"'boxes.c'\"
  163. else
  164. echo shar: Extracting \"'boxes.c'\" \(4197 characters\)
  165. sed "s/^X//" >'boxes.c' <<'END_OF_FILE'
  166. X/****************************************************************/
  167. X/* Box() routines of the PCcurses package            */
  168. X/*                                */
  169. X/****************************************************************/
  170. X/* This version of curses is based on ncurses, a curses version    */
  171. X/* originally written by Pavel Curtis at Cornell University.    */
  172. X/* I have made substantial changes to make it run on IBM PC's,    */
  173. X/* and therefore consider myself free to make it public domain.    */
  174. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  175. X/****************************************************************/
  176. X/* 1.0:    Release:                    870515    */
  177. X/* 1.2:    Max limits off by 1. Fixed thanks to S. Creps:    881002    */
  178. X/* 1.3:    MSC '-W3', Turbo'C' '-w -w-pro' checks. Support        */
  179. X/*    for border(), wborder() functions:        881005    */
  180. X/****************************************************************/
  181. X
  182. X#include <curses.h>
  183. X#include <curspriv.h>
  184. X
  185. Xchar _curses_boxes_rcsid[] = "@(#)boxes.c v1.3 - 881005";
  186. X
  187. X/****************************************************************/
  188. X/* wbox(win,ymin,xmin,ymax,xmax,v,h) draws a box in window    */
  189. X/* 'win', enclosing the area xmin-xmax and ymin-xmax. If    */
  190. X/* xmax and/or ymax is 0, the window max value is used. 'v' and    */
  191. X/* 'h' are the vertical and horizontal characters to use. If    */
  192. X/* 'v' and 'h' are PC grapics lines, wbox will make the corners    */
  193. X/* in a pretty way.                        */
  194. X/****************************************************************/
  195. X
  196. Xint    wbox(win,ymin,xmin,ymax,xmax,v,h)
  197. X  WINDOW    *win;
  198. X  int         ymin;
  199. X  int         xmin;
  200. X  int         ymax;
  201. X  int         xmax;
  202. X  char         v;
  203. X  char         h;
  204. X  {
  205. X  static int     l, r, t, b, tl, tr, bl,br;    /* border chars */
  206. X  int         i;
  207. X
  208. X  if (ymax == 0)
  209. X    ymax = win->_maxy - 1;
  210. X  if (xmax == 0)
  211. X    xmax = win->_maxx - 1;
  212. X
  213. X  if (ymin >= win->_maxy || ymax > win->_maxy ||
  214. X      xmin >= win->_maxx || xmax > win->_maxx ||
  215. X      ymin >= ymax || xmin >= xmax
  216. X     )
  217. X     return(ERR);
  218. X
  219. X  l = r = v & 0xff;            /* get rid of sign-extended int */
  220. X  t = b = h & 0xff;
  221. X  tl = tr = bl = br = v;        /* default same as vertical */
  222. X
  223. X  if (l == 0xba)            /* vertical double bars */
  224. X    {
  225. X    if (t == 0xcd)            /* horizontal too? */
  226. X      {tl=0xc9;tr=0xbb;bl=0xc8;br=0xbc;}/* use double bar corners */
  227. X    else
  228. X      {tl=0xd6;tr=0xb7;bl=0xd3;br=0xbd;}/* use hor-s vert-d corners */
  229. X    } /* if */
  230. X
  231. X  if (l == 0xb3)            /* vertical single bars */
  232. X    {
  233. X    if (t == 0xcd)            
  234. X      {tl=0xd5;tr=0xb8;bl=0xd4;br=0xbe;}/* horizontal double bars */
  235. X    else                
  236. X      {tl=0xda;tr=0xbf;bl=0xc0;br=0xd9;}/* use hor-s vert-s bars */
  237. X    } /* if */
  238. X  if (win->_borderchars[0])        /* border() settings override parms */
  239. X    l = win->_borderchars[0];
  240. X  if (win->_borderchars[3])
  241. X    r = win->_borderchars[1];
  242. X  if (win->_borderchars[3])
  243. X    t = win->_borderchars[2];
  244. X  if (win->_borderchars[3])
  245. X    b = win->_borderchars[3];
  246. X  if (win->_borderchars[4])
  247. X    tl = win->_borderchars[4];
  248. X  if (win->_borderchars[5])
  249. X    tr = win->_borderchars[5];
  250. X  if (win->_borderchars[6])
  251. X    bl = win->_borderchars[6];
  252. X  if (win->_borderchars[7])
  253. X    br = win->_borderchars[7];
  254. X
  255. X  for (i = xmin+1;i <= xmax-1;i++)
  256. X    {
  257. X    win->_line[ymin][i] = t | win->_attrs;
  258. X    win->_line[ymax][i] = b | win->_attrs;
  259. X    }
  260. X  for (i = ymin+1;i <= ymax-1;i++)
  261. X    {
  262. X    win->_line[i][xmin] = l | win->_attrs;
  263. X    win->_line[i][xmax] = r | win->_attrs;
  264. X    }
  265. X  win->_line[ymin][xmin] = tl | win->_attrs;
  266. X  win->_line[ymin][xmax] = tr | win->_attrs;
  267. X  win->_line[ymax][xmin] = bl | win->_attrs;
  268. X  win->_line[ymax][xmax] = br | win->_attrs;
  269. X
  270. X  for (i=ymin; i <= ymax ; i++)
  271. X    {
  272. X    if (win->_minchng[i] == _NO_CHANGE)
  273. X      {
  274. X      win->_minchng[i] = xmin;
  275. X      win->_maxchng[i] = xmax;
  276. X      } /* if */
  277. X    else
  278. X      {
  279. X      win->_minchng[i] = min(win->_minchng[i], xmin);
  280. X      win->_maxchng[i] = max(win->_maxchng[i], xmax);
  281. X      } /* else */
  282. X    } /* for */
  283. X  return(OK);
  284. X  } /* box */
  285. X
  286. X/****************************************************************/
  287. X/* box(win,v,h) draws a box around window window 'win'. 'v' and    */
  288. X/* 'h' are the vertical and horizontal characters to use.    */
  289. X/****************************************************************/
  290. X
  291. Xvoid    box(win,v,h)
  292. X  WINDOW    *win;
  293. X  char         v;
  294. X  char         h;
  295. X  {
  296. X  wbox(win,0,0,0,0,v,h);
  297. X  } /* box */
  298. END_OF_FILE
  299. if test 4197 -ne `wc -c <'boxes.c'`; then
  300.     echo shar: \"'boxes.c'\" unpacked with wrong size!
  301. fi
  302. # end of 'boxes.c'
  303. fi
  304. if test -f 'chardel.c' -a "${1}" != "-c" ; then 
  305.   echo shar: Will not clobber existing file \"'chardel.c'\"
  306. else
  307. echo shar: Extracting \"'chardel.c'\" \(3106 characters\)
  308. sed "s/^X//" >'chardel.c' <<'END_OF_FILE'
  309. X/****************************************************************/
  310. X/* Wdelch() routine of the PCcurses package            */
  311. X/*                                */
  312. X/****************************************************************/
  313. X/* This version of curses is based on ncurses, a curses version    */
  314. X/* originally written by Pavel Curtis at Cornell University.    */
  315. X/* I have made substantial changes to make it run on IBM PC's,    */
  316. X/* and therefore consider myself free to make it public domain.    */
  317. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  318. X/****************************************************************/
  319. X/* 1.0:    Release:                    870515    */
  320. X/* 1.2:    Max limits off by 1. Fixed thanks to S. Creps:    881002    */
  321. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  322. X/****************************************************************/
  323. X
  324. X#include <curses.h>
  325. X#include <curspriv.h>
  326. X
  327. Xchar _curses_chardel_rcsid[] = "@(#)chardel.c v1.3 - 881005";
  328. X
  329. X/****************************************************************/
  330. X/* Wdelch() deletes the character at the window cursor, and the    */
  331. X/* characters to the right of it are shifted left, inserting a    */
  332. X/* space at the last position of the line.            */
  333. X/****************************************************************/
  334. X
  335. Xint    wdelch(win)
  336. X  WINDOW    *win;
  337. X  {
  338. X  int        *temp1;
  339. X  int        *temp2;
  340. X  int        *end;
  341. X  short     y = win->_cury;
  342. X  short     x = win->_curx;
  343. X  short     maxx = win->_maxx - 1;
  344. X
  345. X  end = &win->_line[y][maxx];
  346. X  temp1 = &win->_line[y][x];
  347. X  temp2 = temp1 + 1;
  348. X  while (temp1 < end)
  349. X    *temp1++ = *temp2++;
  350. X  *temp1 = ' ' | (win->_attrs & ATR_MSK);
  351. X  win->_maxchng[y] = maxx;
  352. X  if (win->_minchng[y] == _NO_CHANGE || win->_minchng[y] > x)
  353. X    win->_minchng[y] = x;
  354. X  return(OK);
  355. X  } /* wdelch */
  356. X
  357. X/****************************************************************/
  358. X/* Delch() deletes the character at the stdscr cursor, and the    */
  359. X/* characters to the right of it are shifted left, inserting a    */
  360. X/* space at the last position of the line.            */
  361. X/****************************************************************/
  362. X
  363. Xint delch()
  364. X  {
  365. X  return(wdelch(stdscr));
  366. X  } /* delch */
  367. X
  368. X/****************************************************************/
  369. X/* Mvdelch() moves the stdscr cursor to a new position, then    */
  370. X/* deletes the character at the stdscr cursor, and the charac-    */
  371. X/* ters to the right of it are shifted left, inserting a space    */
  372. X/* at the last position of the line.                */
  373. X/****************************************************************/
  374. X
  375. Xint mvdelch(y,x)
  376. X  int y;
  377. X  int x;
  378. X  {
  379. X  if (wmove(stdscr,y,x) == ERR)
  380. X    return(ERR);
  381. X  return(wdelch(stdscr));
  382. X  } /* mvdelch */
  383. X
  384. X/****************************************************************/
  385. X/* Mvwdelch() moves the cursor of window 'win' to a new posi-    */
  386. X/* tion, then deletes the character at the stdscr cursor, and    */
  387. X/* the characters to the right of it are shifted left, inser-    */
  388. X/* ting a space at the last position of the line.        */
  389. X/****************************************************************/
  390. X
  391. Xint mvwdelch(win,y,x)
  392. X  WINDOW *win;
  393. X  int y;
  394. X  int x;
  395. X  {
  396. X  if (wmove(win,y,x) == ERR)
  397. X    return(ERR);
  398. X  return(wdelch(win));
  399. X  } /* mvwdelch */
  400. END_OF_FILE
  401. if test 3106 -ne `wc -c <'chardel.c'`; then
  402.     echo shar: \"'chardel.c'\" unpacked with wrong size!
  403. fi
  404. # end of 'chardel.c'
  405. fi
  406. if test -f 'charins.c' -a "${1}" != "-c" ; then 
  407.   echo shar: Will not clobber existing file \"'charins.c'\"
  408. else
  409. echo shar: Extracting \"'charins.c'\" \(5462 characters\)
  410. sed "s/^X//" >'charins.c' <<'END_OF_FILE'
  411. X/****************************************************************/
  412. X/* Winsch() routine of the PCcurses package            */
  413. X/*                                */
  414. X/****************************************************************/
  415. X/* This version of curses is based on ncurses, a curses version    */
  416. X/* originally written by Pavel Curtis at Cornell University.    */
  417. X/* I have made substantial changes to make it run on IBM PC's,    */
  418. X/* and therefore consider myself free to make it public domain.    */
  419. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  420. X/****************************************************************/
  421. X/* 1.0:    Release:                    870515    */
  422. X/* 1.1:    Added 'raw' output routines (allows PC charac-        */
  423. X/*    ters < 0x20 to be displayed:            880306    */
  424. X/* 1.2:    Max limits off by 1. Fixed thanks to S. Creps:    881002    */
  425. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  426. X/****************************************************************/
  427. X
  428. X#include <curses.h>
  429. X#include <curspriv.h>
  430. X
  431. Xchar _curses_charins_rcsid[] = "@(#)charins.c v1.3 - 881005";
  432. X
  433. X/****************************************************************/
  434. X/* _Chins() inserts character 'c' at the cursor position in    */
  435. X/* window 'win'. If xlat is true, normal character translation    */
  436. X/* is performed; If xlat is false, the character is output 'as    */
  437. X/* is'.                                */
  438. X/****************************************************************/
  439. X
  440. Xstatic    int    _chins(win,c,xlat)
  441. X  WINDOW    *win;
  442. X  char         c;
  443. X  bool         xlat;
  444. X  {
  445. X  int        *temp1;
  446. X  int        *temp2;
  447. X  int        *end;
  448. X  int         x = win->_curx;
  449. X  int         y = win->_cury;
  450. X  int         maxx = win->_maxx - 1;
  451. X
  452. X  if((c < ' ') && (c == '\n' || c == '\r' || c == '\t' || c == '\b'))
  453. X    return(_chadd(win,c,xlat));
  454. X  end = &win->_line[y][x];
  455. X  temp1 = &win->_line[y][maxx];
  456. X  temp2 = temp1 - 1;
  457. X  if((c < ' ') && xlat)            /* if CTRL-char make space for 2 */
  458. X    temp2--;
  459. X  while (temp1 > end)
  460. X    *temp1-- = *temp2--;
  461. X  win->_maxchng[y] = maxx;
  462. X  if ((win->_minchng[y] == _NO_CHANGE) || (win->_minchng[y] > x))
  463. X    win->_minchng[y] = x;
  464. X  return(_chadd(win,c,xlat));        /* fixes CTRL-chars too */
  465. X  } /* _chins */
  466. X
  467. X/****************************************************************/
  468. X/* Insch() inserts character 'c' at the cursor position in    */
  469. X/* stdscr. The cursor is advanced.                */
  470. X/****************************************************************/
  471. X
  472. Xint insch(c)
  473. X  char c;
  474. X  {
  475. X  return(_chins(stdscr,c,TRUE));
  476. X  } /* insch */
  477. X
  478. X/****************************************************************/
  479. X/* Winsch() inserts character 'c' at the cursor position in    */
  480. X/* window 'win'. The cursor is advanced.            */
  481. X/****************************************************************/
  482. X
  483. Xint winsch(win,c)
  484. X  WINDOW *win;
  485. X  char c;
  486. X  {
  487. X  return(_chins(win,c,TRUE));
  488. X  } /* winsch */
  489. X
  490. X/****************************************************************/
  491. X/* Mvinsch() moves the stdscr cursor to a new position, then    */
  492. X/* inserts character 'c' at the cursor position in stdscr. The    */
  493. X/* cursor is advanced.                        */
  494. X/****************************************************************/
  495. X
  496. Xint mvinsch(y,x,c)
  497. X  int  y;
  498. X  int  x;
  499. X  char c;
  500. X  {
  501. X  if (wmove(stdscr,y,x) == ERR)
  502. X    return(ERR);
  503. X  return(_chins(stdscr,c,TRUE));
  504. X  } /* mvinsch */
  505. X
  506. X/****************************************************************/
  507. X/* Mvwinsch() moves the cursor of window 'win' to a new posi-    */
  508. X/* tion, then inserts character 'c' at the cursor position in    */
  509. X/* window 'win'. The cursor is advanced.            */
  510. X/****************************************************************/
  511. X
  512. Xint mvwinsch(win,y,x,c)
  513. X  WINDOW *win;
  514. X  int  y;
  515. X  int  x;
  516. X  char c;
  517. X  {
  518. X  if (wmove(win,y,x) == ERR)
  519. X    return(ERR);
  520. X  return(_chins(win,c,TRUE));
  521. X  } /* mvwinsch */
  522. X
  523. X/****************************************************************/
  524. X/* Insrawch() inserts character 'c' at the cursor position in    */
  525. X/* stdscr. Control characters are not interpreted, and the    */
  526. X/* cursor is advanced.                        */
  527. X/****************************************************************/
  528. X
  529. Xint insrawch(c)
  530. X  char c;
  531. X  {
  532. X  return(_chins(stdscr,c,FALSE));
  533. X  } /* insrawch */
  534. X
  535. X/****************************************************************/
  536. X/* Winsrawch() inserts character 'c' at the cursor position in    */
  537. X/* window 'win'. Control characters are not interpreted, and    */
  538. X/* the cursor is advanced.                    */
  539. X/****************************************************************/
  540. X
  541. Xint winsrawch(win,c)
  542. X  WINDOW *win;
  543. X  char c;
  544. X  {
  545. X  return(_chins(win,c,FALSE));
  546. X  } /* winsrawch */
  547. X
  548. X/****************************************************************/
  549. X/* Mvinsrawch() moves the stdscr cursor to a new position, then    */
  550. X/* inserts character 'c' at the cursor position in stdscr.    */
  551. X/* Control characters are not interpreted, and    the cursor is    */
  552. X/* advanced.                            */
  553. X/****************************************************************/
  554. X
  555. Xint mvinsrawch(y,x,c)
  556. X  int  y;
  557. X  int  x;
  558. X  char c;
  559. X  {
  560. X  if (wmove(stdscr,y,x) == ERR)
  561. X    return(ERR);
  562. X  return(_chins(stdscr,c,FALSE));
  563. X  } /* mvinsrawch */
  564. X
  565. X/****************************************************************/
  566. X/* Mvwinsrawch() moves the cursor of window 'win' to a new    */
  567. X/* position, then inserts character 'c' at the cursor position    */
  568. X/* in window 'win'. Control characters are not interpreted, and    */
  569. X/* the cursor is advanced.                    */
  570. X/****************************************************************/
  571. X
  572. Xint mvwinsrawch(win,y,x,c)
  573. X  WINDOW *win;
  574. X  int  y;
  575. X  int  x;
  576. X  char c;
  577. X  {
  578. X  if (wmove(win,y,x) == ERR)
  579. X    return(ERR);
  580. X  return(_chins(win,c,FALSE));
  581. X  } /* mvwinsrawch */
  582. END_OF_FILE
  583. if test 5462 -ne `wc -c <'charins.c'`; then
  584.     echo shar: \"'charins.c'\" unpacked with wrong size!
  585. fi
  586. # end of 'charins.c'
  587. fi
  588. if test -f 'clrtobot.c' -a "${1}" != "-c" ; then 
  589.   echo shar: Will not clobber existing file \"'clrtobot.c'\"
  590. else
  591. echo shar: Extracting \"'clrtobot.c'\" \(3336 characters\)
  592. sed "s/^X//" >'clrtobot.c' <<'END_OF_FILE'
  593. X/****************************************************************/
  594. X/* Wclrtobot() routine of the PCcurses package            */
  595. X/*                                */
  596. X/****************************************************************/
  597. X/* This version of curses is based on ncurses, a curses version    */
  598. X/* originally written by Pavel Curtis at Cornell University.    */
  599. X/* I have made substantial changes to make it run on IBM PC's,    */
  600. X/* and therefore consider myself free to make it public domain.    */
  601. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  602. X/****************************************************************/
  603. X/* 1.0:    Release:                    870515    */
  604. X/* 1.1:    Renamed clrbot() to clrtobot(). Reported by        */
  605. X/*    Eric Rosco:                    870907    */
  606. X/* 1.2:    Max limits off by 1. Fixed thanks to S. Creps:    881002    */
  607. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  608. X/****************************************************************/
  609. X
  610. X#include <curses.h>
  611. X#include <curspriv.h>
  612. X
  613. Xchar _curses_clrtobot_rcsid[] = "@(#)clrtobot.c v1.3 - 881005";
  614. X
  615. X/****************************************************************/
  616. X/* Wclrtobot() fills the right half of the cursor line of    */
  617. X/* window 'win', and all lines below it with blanks.        */
  618. X/****************************************************************/
  619. X
  620. Xint    wclrtobot(win)
  621. X  WINDOW    *win;
  622. X  {
  623. X  int     y;
  624. X  int   minx;
  625. X  static int     startx;
  626. X  static int    *ptr;
  627. X  static int    *end;
  628. X  static int    *maxx;
  629. X  static int     blank;
  630. X
  631. X  blank = ' ' | (win->_attrs & ATR_MSK);
  632. X  startx = win->_curx;
  633. X  for (y = win->_cury; y <= win->_regbottom; y++)
  634. X    {
  635. X    minx = _NO_CHANGE;
  636. X    end = &win->_line[y][win->_maxx - 1];
  637. X    for (ptr = &win->_line[y][startx]; ptr <= end; ptr++)
  638. X      {
  639. X      if (*ptr != blank)
  640. X    {
  641. X    maxx = ptr;
  642. X    if (minx == _NO_CHANGE)
  643. X      minx = ptr - win->_line[y];
  644. X    *ptr = blank;
  645. X    } /* if */
  646. X      } /* for */
  647. X    if (minx != _NO_CHANGE)
  648. X      {
  649. X      if ((win->_minchng[y] > minx) ||  (win->_minchng[y] == _NO_CHANGE))
  650. X    win->_minchng[y] = minx;
  651. X      if (win->_maxchng[y] < maxx - win->_line[y])
  652. X    win->_maxchng[y] = maxx - win->_line[y];
  653. X      } /* if */
  654. X    startx = 0;
  655. X    } /* for */
  656. X  return(OK);
  657. X  } /* wclrtobot */
  658. X
  659. X/****************************************************************/
  660. X/* Clrtobot() fills the right half of the cursor line of    */
  661. X/* stdscr, and all lines below it with blanks.            */
  662. X/****************************************************************/
  663. X
  664. Xint clrtobot()
  665. X  {
  666. X  return(wclrtobot(stdscr));
  667. X  } /* clrtobot */
  668. X
  669. X/****************************************************************/
  670. X/* Mvclrtobot() moves the cursor to a new position in stdscr    */
  671. X/* and fills the right half of the cursor line, and all lines    */
  672. X/* below it with blanks.                    */
  673. X/****************************************************************/
  674. X
  675. Xint mvclrtobot(y,x)
  676. X  int y;
  677. X  int x;
  678. X  {
  679. X  if (wmove(stdscr,y,x) == ERR)
  680. X    return(ERR);
  681. X  return(wclrtobot(stdscr));
  682. X  } /* mvclrtobot */
  683. X
  684. X/****************************************************************/
  685. X/* Mvwclrtobot() moves the cursor to a new position in window    */
  686. X/* 'win', and fills the right half of the cursor line, and all    */
  687. X/* lines below it with blanks.                    */
  688. X/****************************************************************/
  689. X
  690. Xint mvwclrtobot(win,y,x)
  691. X  WINDOW *win;
  692. X  int y;
  693. X  int x;
  694. X  {
  695. X  if (wmove(win,y,x) == ERR)
  696. X    return(ERR);
  697. X  return(wclrtobot(win));
  698. X  } /* mvwclrtobot */
  699. END_OF_FILE
  700. if test 3336 -ne `wc -c <'clrtobot.c'`; then
  701.     echo shar: \"'clrtobot.c'\" unpacked with wrong size!
  702. fi
  703. # end of 'clrtobot.c'
  704. fi
  705. if test -f 'clrtoeol.c' -a "${1}" != "-c" ; then 
  706.   echo shar: Will not clobber existing file \"'clrtoeol.c'\"
  707. else
  708. echo shar: Extracting \"'clrtoeol.c'\" \(3119 characters\)
  709. sed "s/^X//" >'clrtoeol.c' <<'END_OF_FILE'
  710. X/****************************************************************/
  711. X/* Wclrtoeol() routine of the PCcurses package            */
  712. X/*                                */
  713. X/****************************************************************/
  714. X/* This version of curses is based on ncurses, a curses version    */
  715. X/* originally written by Pavel Curtis at Cornell University.    */
  716. X/* I have made substantial changes to make it run on IBM PC's,    */
  717. X/* and therefore consider myself free to make it public domain.    */
  718. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  719. X/****************************************************************/
  720. X/* 1.0:    Release:                    870515    */
  721. X/* 1.2:    Max limits off by 1. Fixed thanks to S. Creps:    880210    */
  722. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  723. X/****************************************************************/
  724. X
  725. X#include <curses.h>
  726. X#include <curspriv.h>
  727. X
  728. Xchar _curses_clrtoeol_rcsid[] = "@(#)clrtoeol.c v1.3 - 881005";
  729. X
  730. X/****************************************************************/
  731. X/* Wclrtoeol() fills the half of the cursor line to the right    */
  732. X/* of the cursor in window 'win' with blanks.            */
  733. X/****************************************************************/
  734. X
  735. Xint    wclrtoeol(win)
  736. X   WINDOW    *win;
  737. X  {
  738. X  int        *maxx;
  739. X  int        *ptr;
  740. X  int        *end;
  741. X  static int     y;
  742. X  static int     x;
  743. X  static int     minx;
  744. X  static int      blank;
  745. X  
  746. X  y = win->_cury;
  747. X  x = win->_curx;
  748. X  blank = ' ' | (win->_attrs & ATR_MSK);
  749. X
  750. X  end = &win->_line[y][win->_maxx - 1];
  751. X  minx = _NO_CHANGE;
  752. X  maxx = &win->_line[y][x];
  753. X  for (ptr = maxx; ptr <= end; ptr++)
  754. X    {
  755. X    if (*ptr != blank)
  756. X      {
  757. X      maxx = ptr;
  758. X      if (minx == _NO_CHANGE)
  759. X    minx = ptr - win->_line[y];
  760. X      *ptr = blank;
  761. X      } /* if */
  762. X    } /* for */
  763. X
  764. X  if (minx != _NO_CHANGE)
  765. X    {
  766. X    if (win->_minchng[y] > minx || win->_minchng[y] == _NO_CHANGE)
  767. X      win->_minchng[y] = minx;
  768. X    if (win->_maxchng[y] < maxx - win->_line[y])
  769. X      win->_maxchng[y] = maxx - win->_line[y];
  770. X    } /* if */
  771. X  return(OK);
  772. X  } /* wclrtoeol */
  773. X
  774. X/****************************************************************/
  775. X/* Clrtoeol() fills the half of the cursor line to the right    */
  776. X/* of the cursor in stdscr with blanks.                */
  777. X/****************************************************************/
  778. X
  779. Xint clrtoeol()
  780. X  {
  781. X  return(wclrtoeol(stdscr));
  782. X  } /* clrtoeol */
  783. X
  784. X/****************************************************************/
  785. X/* Mvclrtoeol() moves the cursor to a new position in stdscr    */
  786. X/* and fills the right half of the cursor line with blanks.    */
  787. X/****************************************************************/
  788. X
  789. Xint mvcltoreol(y,x)
  790. X  int y;
  791. X  int x;
  792. X  {
  793. X  if (wmove(stdscr,y,x) == ERR)
  794. X    return(ERR);
  795. X  return(wclrtoeol(stdscr));
  796. X  } /* mvclrtoeol */
  797. X
  798. X/****************************************************************/
  799. X/* Mvwclrtoeol() moves the cursor to a new position in window    */
  800. X/* 'win', and fills the right half of the cursor line with    */
  801. X/* blanks.                            */
  802. X/****************************************************************/
  803. X
  804. Xint mvwclrtoeol(win,y,x)
  805. X  WINDOW *win;
  806. X  int y;
  807. X  int x;
  808. X  {
  809. X  if (wmove(win,y,x) == ERR)
  810. X    return(ERR);
  811. X  return(wclrtoeol(win));
  812. X  } /* mvwclrtoeol */
  813. END_OF_FILE
  814. if test 3119 -ne `wc -c <'clrtoeol.c'`; then
  815.     echo shar: \"'clrtoeol.c'\" unpacked with wrong size!
  816. fi
  817. # end of 'clrtoeol.c'
  818. fi
  819. if test -f 'curspriv.h' -a "${1}" != "-c" ; then 
  820.   echo shar: Will not clobber existing file \"'curspriv.h'\"
  821. else
  822. echo shar: Extracting \"'curspriv.h'\" \(3818 characters\)
  823. sed "s/^X//" >'curspriv.h' <<'END_OF_FILE'
  824. X/****************************************************************/
  825. X/*               CURSPRIV.H                */
  826. X/* Header file for definitions and declarations for the        */
  827. X/* PCcurses package. These definitions should not be gene-    */
  828. X/* rally accessible to programmers.                */
  829. X/****************************************************************/
  830. X/* This version of curses is based on ncurses, a curses version    */
  831. X/* originally written by Pavel Curtis at Cornell University.    */
  832. X/* I have made substantial changes to make it run on IBM PC's,    */
  833. X/* and therefore consider myself free to make it public domain.    */
  834. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  835. X/****************************************************************/
  836. X/* 1.0:    Release:                    870515    */
  837. X/* 1.1:    Add _chadd() for raw output routines:        880306    */
  838. X/* 1.2:    Support (by #ifdef UCMASM) for uppercase-only        */
  839. X/*    assembly routine names. If UCMASM if defined,        */
  840. X/*    all assembler names are #defined as upper case.        */
  841. X/*    Not needed if you do "MASM /MX. Also missing        */
  842. X/*     declaration of cursesscroll(). Fixes thanks to        */
  843. X/*    N.D. Pentcheff:                    881002    */ 
  844. X/* 1.3:    All modules lint-checked with MSC '-W3' and        */
  845. X/*    turbo'C' '-w -w-pro' switches:            881005    */
  846. X/****************************************************************/
  847. X
  848. X/* window properties */
  849. X
  850. X#define    _SUBWIN        1        /* window is a subwindow */
  851. X#define    _ENDLINE    2        /* last winline is last screen line */
  852. X#define    _FULLWIN    4        /* window fills screen */
  853. X#define    _SCROLLWIN    8        /* window lwr rgt is screen lwr rgt */
  854. X
  855. X/* Miscellaneous */
  856. X
  857. X#define    _INBUFSIZ    200        /* size of terminal input buffer */
  858. X#define    _NO_CHANGE    -1        /* flags line edge unchanged */
  859. X
  860. X#define    _BREAKCHAR    0x03        /* ^C character */
  861. X#define _DCCHAR        0x08        /* Delete Char char (BS) */
  862. X#define _DLCHAR        0x1b        /* Delete Line char (ESC) */
  863. X#define    _GOCHAR        0x11        /* ^Q character */
  864. X#define    _PRINTCHAR    0x10        /* ^P character */
  865. X#define    _STOPCHAR    0x13        /* ^S character */
  866. X#define     NUNGETCH    10        /* max # chars to ungetch() */
  867. X
  868. X/* character mask definitions */
  869. X
  870. X#define CHR_MSK    ((int) 0x00ff)        /* ASCIIZ character mask */
  871. X#define    ATR_MSK    ((int) 0xff00)        /* attribute mask */
  872. X#define ATR_NRM    ((int) 0x0000)        /* no special attributes */
  873. X
  874. X/* type declarations */
  875. X
  876. Xtypedef    struct
  877. X  {
  878. X  WINDOW  *tmpwin;            /* window used for updates */
  879. X  int       cursrow;            /* position of physical cursor */
  880. X  int       curscol;
  881. X  bool       autocr;            /* if lf -> crlf */
  882. X  bool       cbreak;            /* if terminal unbuffered */
  883. X  bool       echo;            /* if terminal echo */
  884. X  bool       raw;                /* if terminal raw mode */
  885. X  bool       refrbrk;            /* if premature refresh brk allowed */
  886. X  bool     orgcbr;            /* original MSDOS ^-BREAK setting */
  887. X  }    cursv;
  888. X
  889. X/* External variables */
  890. X
  891. Xextern    cursv   _cursvar;        /* curses variables */
  892. X
  893. X/* 'C' standard library function declarations */
  894. X
  895. Xextern    char    *calloc();
  896. Xextern    char    *malloc();
  897. Xextern    void     free();
  898. Xextern    int     sprintf();
  899. Xextern    int     sscanf();
  900. X
  901. X/* Curses internal functions, not to be used by programmers */
  902. X
  903. X/* #Define UCMASM if your version of MASM does not support */
  904. X/*  the '/MX' switch, or if you use another assembler */
  905. X
  906. X#ifdef    UCMASM
  907. X#define    _cursescattr    _CURSESCATTR
  908. X#define    _cursescmode    _CURSESCMODE
  909. X#define    _cursescursor    _CURSESCURSOR
  910. X#define    _cursesgcb    _CURSESGCB
  911. X#define    _cursesgcmode    _CURSESGCMODE
  912. X#define    _cursesgcols    _CURSESGCOLS
  913. X#define    _curseskey    _CURSESKEY
  914. X#define    _cursesscroll    _CURSESSCROLL
  915. X#define    _curseskeytst    _CURSESKEYTST
  916. X#define    _cursesputc    _CURSESPUTC
  917. X#define    _cursesscb    _CURSESSCB
  918. X#endif
  919. Xextern    int    _chadd();
  920. Xextern    void    _cursescattr();
  921. Xextern    void    _cursescmode();
  922. Xextern    void    _cursescursor();
  923. Xextern    int    _cursesgcb();
  924. Xextern    int    _cursesgcmode();
  925. Xextern    int    _cursesgcols();
  926. Xextern    int    _curseskey();
  927. Xextern    bool    _curseskeytst();
  928. Xextern    void    _cursesscroll();
  929. Xextern    bool    _cursespendch();
  930. Xextern    void    _cursesputc();
  931. Xextern    void    _cursesscb();
  932. END_OF_FILE
  933. if test 3818 -ne `wc -c <'curspriv.h'`; then
  934.     echo shar: \"'curspriv.h'\" unpacked with wrong size!
  935. fi
  936. # end of 'curspriv.h'
  937. fi
  938. if test -f 'linedel.c' -a "${1}" != "-c" ; then 
  939.   echo shar: Will not clobber existing file \"'linedel.c'\"
  940. else
  941. echo shar: Extracting \"'linedel.c'\" \(3128 characters\)
  942. sed "s/^X//" >'linedel.c' <<'END_OF_FILE'
  943. X/****************************************************************/
  944. X/* Wdeleteln() routine of the PCcurses package            */
  945. X/*                                */
  946. X/****************************************************************/
  947. X/* This version of curses is based on ncurses, a curses version    */
  948. X/* originally written by Pavel Curtis at Cornell University.    */
  949. X/* I have made substantial changes to make it run on IBM PC's,    */
  950. X/* and therefore consider myself free to make it public domain.    */
  951. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  952. X/****************************************************************/
  953. X/* 1.0:    Release:                    870515    */
  954. X/* 1.2:    max limits off by 1. Fixed thanks to S. Creps:    881002    */
  955. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  956. X/****************************************************************/
  957. X
  958. X#include <curses.h>
  959. X#include <curspriv.h>
  960. X
  961. Xchar _curses_linedel_rcsid[] = "@(#)linedel.c v1.3 - 881005";
  962. X
  963. X/****************************************************************/
  964. X/* Wdeleteln() deletes the line at the window cursor, and the    */
  965. X/* lines below it are shifted up, inserting a blank line at    */
  966. X/* the bottom of the window.                    */
  967. X/****************************************************************/
  968. X
  969. Xint    wdeleteln(win)
  970. X  WINDOW    *win;
  971. X  {
  972. X  int        *end;
  973. X  int        *temp;
  974. X  short     y;
  975. X  static   int     blank;
  976. X  
  977. X  blank = ' ' | (win->_attrs & ATR_MSK);
  978. X
  979. X  temp = win->_line[win->_cury];
  980. X  for (y = win->_cury; y < win->_regbottom; y++)
  981. X    {
  982. X    win->_line[y] = win->_line[y+1];
  983. X    win->_minchng[y] = 0;
  984. X    win->_maxchng[y] = win->_maxx - 1;
  985. X    }
  986. X  win->_minchng[y] = 0;
  987. X  win->_maxchng[y] = win->_maxx - 1;
  988. X  win->_line[win->_regbottom] = temp;
  989. X  for (end = &(temp[win->_maxx -1]); temp <= end;)
  990. X    *temp++ = blank;
  991. X  return(OK);
  992. X  } /* wdeleteln */
  993. X
  994. X/****************************************************************/
  995. X/* Deleteln() deletes the line at the stdscr cursor, and the    */
  996. X/* lines below it are shifted up, inserting a blank line at    */
  997. X/* the bottom of stdscr.                    */
  998. X/****************************************************************/
  999. X
  1000. Xint deleteln()
  1001. X  {
  1002. X  return(wdeleteln(stdscr));
  1003. X  } /* deleteln */
  1004. X
  1005. X/****************************************************************/
  1006. X/* Mvdeleteln() moves the cursor to a new position in stdscr,    */
  1007. X/* then deletes the line at the window cursor, and the lines    */
  1008. X/* below it are shifted up, inserting a blank line at the bot-    */
  1009. X/* tom of stdscr.                        */
  1010. X/****************************************************************/
  1011. X
  1012. Xint mvdeleteln(y,x)
  1013. X  int y;
  1014. X  int x;
  1015. X  {
  1016. X  if (wmove(stdscr,y,x) == ERR)
  1017. X    return(ERR);
  1018. X  return(wdeleteln(stdscr));
  1019. X  } /* mvdeleteln */
  1020. X
  1021. X/****************************************************************/
  1022. X/* Mvwdeleteln() moves the cursor to a new position in a win-    */
  1023. X/* dow, then deletes the line at the window cursor, and the    */
  1024. X/* lines below it are shifted up, inserting a blank line at    */
  1025. X/* the bottom of the window.                    */
  1026. X/****************************************************************/
  1027. X
  1028. Xint mvwdeleteln(win,y,x)
  1029. X  WINDOW *win;
  1030. X  int y;
  1031. X  int x;
  1032. X  {
  1033. X  if (wmove(win,y,x) == ERR)
  1034. X    return(ERR);
  1035. X  return(wdeleteln(win));
  1036. X  } /* mvwdeleteln */
  1037. END_OF_FILE
  1038. if test 3128 -ne `wc -c <'linedel.c'`; then
  1039.     echo shar: \"'linedel.c'\" unpacked with wrong size!
  1040. fi
  1041. # end of 'linedel.c'
  1042. fi
  1043. if test -f 'lineins.c' -a "${1}" != "-c" ; then 
  1044.   echo shar: Will not clobber existing file \"'lineins.c'\"
  1045. else
  1046. echo shar: Extracting \"'lineins.c'\" \(3010 characters\)
  1047. sed "s/^X//" >'lineins.c' <<'END_OF_FILE'
  1048. X/****************************************************************/
  1049. X/* Winsertln() routine of the PCcurses package            */
  1050. X/*                                */
  1051. X/****************************************************************/
  1052. X/* This version of curses is based on ncurses, a curses version    */
  1053. X/* originally written by Pavel Curtis at Cornell University.    */
  1054. X/* I have made substantial changes to make it run on IBM PC's,    */
  1055. X/* and therefore consider myself free to make it public domain.    */
  1056. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1057. X/****************************************************************/
  1058. X/* 1.0:    Release:                    870515    */
  1059. X/* 1.1:    Mvinsertln() and friends were misrenamed:    880305    */
  1060. X/* 1.2:    Max limits off by 1. Fixed thanks to S. Creps:    881002    */
  1061. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  1062. X/****************************************************************/
  1063. X
  1064. X#include <curses.h>
  1065. X#include <curspriv.h>
  1066. X
  1067. Xchar _curses_lineins_rcsid[] = "@(#)lineins.c v1.3 - 881005";
  1068. X
  1069. X/****************************************************************/
  1070. X/* Winsertln() inserts a blank line instead of the cursor line    */
  1071. X/* in window 'win' and pushes other lines down.            */
  1072. X/****************************************************************/
  1073. X
  1074. Xint    winsertln(win)
  1075. X  WINDOW    *win;
  1076. X  {
  1077. X  int        *temp;
  1078. X  int        *end;
  1079. X  short     y;
  1080. X  static   int     blank;
  1081. X  
  1082. X  blank = ' ' | (win->_attrs & ATR_MSK);
  1083. X  temp = win->_line[win->_regbottom];
  1084. X  for (y = win->_regbottom;  y > win->_cury;  y--)
  1085. X    {
  1086. X    win->_line[y] = win->_line[y-1];
  1087. X    win->_minchng[y] = 0;
  1088. X    win->_maxchng[y] = win->_maxx - 1;
  1089. X    } /* for */
  1090. X  win->_line[win->_cury] = temp;
  1091. X  for (end = &temp[win->_maxx -1];  temp <= end;  temp++)
  1092. X    *temp = blank;
  1093. X  win->_minchng[win->_cury] = 0;
  1094. X  win->_maxchng[win->_cury] = win->_maxx - 1;
  1095. X  return(OK);
  1096. X  } /* winsertln */
  1097. X
  1098. X/****************************************************************/
  1099. X/* Insertln() inserts a blank line instead of the cursor line    */
  1100. X/* in stdscr and pushes other lines down.            */
  1101. X/****************************************************************/
  1102. X
  1103. Xint insertln()
  1104. X  {
  1105. X  return(winsertln(stdscr));
  1106. X  } /* insertln */
  1107. X
  1108. X/****************************************************************/
  1109. X/* Mvinsertln() moves the stdscr cursor to a new positions, in-    */
  1110. X/* serts a blank line instead of the cursor line and pushes    */
  1111. X/* other lines down.                        */
  1112. X/****************************************************************/
  1113. X
  1114. Xint mvinsertln(y,x)
  1115. X  int y;
  1116. X  int x;
  1117. X  {
  1118. X  if (wmove(stdscr,y,x) == ERR)
  1119. X    return(ERR);
  1120. X  return(winsertln(stdscr));
  1121. X  } /* mvinsertln */
  1122. X
  1123. X/****************************************************************/
  1124. X/* Mvwinsertln() moves the cursor in window 'win' to a new po-    */
  1125. X/* si tions, inserts a blank line instead of the cursor line    */
  1126. X/* and pushes other lines down.                    */
  1127. X/****************************************************************/
  1128. X
  1129. Xint mvwinsertln(win,y,x)
  1130. X  WINDOW *win;
  1131. X  int y;
  1132. X  int x;
  1133. X  {
  1134. X  if (wmove(win,y,x) == ERR)
  1135. X    return(ERR);
  1136. X  return(winsertln(win));
  1137. X  } /* mvwinsertln */
  1138. END_OF_FILE
  1139. if test 3010 -ne `wc -c <'lineins.c'`; then
  1140.     echo shar: \"'lineins.c'\" unpacked with wrong size!
  1141. fi
  1142. # end of 'lineins.c'
  1143. fi
  1144. if test -f 'options.c' -a "${1}" != "-c" ; then 
  1145.   echo shar: Will not clobber existing file \"'options.c'\"
  1146. else
  1147. echo shar: Extracting \"'options.c'\" \(4288 characters\)
  1148. sed "s/^X//" >'options.c' <<'END_OF_FILE'
  1149. X/****************************************************************/
  1150. X/* Idlok(), clearok(), leaveok(), scrollok(), nodelay(), key-    */
  1151. X/* pad(), meta(), cursoff() and curson() routines of the    */
  1152. X/* PCcurses package.                        */
  1153. X/*                                */
  1154. X/****************************************************************/
  1155. X/* This version of curses is based on ncurses, a curses version    */
  1156. X/* originally written by Pavel Curtis at Cornell University.    */
  1157. X/* I have made substantial changes to make it run on IBM PC's,    */
  1158. X/* and therefore consider myself free to make it public domain.    */
  1159. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1160. X/****************************************************************/
  1161. X/* 1.0:    Release:                    870515    */
  1162. X/* 1.2:    Rcsid[] string for maintenance:            881002    */
  1163. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  1164. X/****************************************************************/
  1165. X
  1166. X#include <curses.h>
  1167. X#include <curspriv.h>
  1168. X
  1169. Xchar _curses_options_rcsid[] = "@(#)option.c v1.3 - 881005";
  1170. X
  1171. Xstatic bool    hasold = FALSE;        /* for remembering old cursor type */
  1172. Xstatic int    oldmode;
  1173. X
  1174. X/****************************************************************/
  1175. X/* Idlok() is used to set  flag for using the terminal insert/    */
  1176. X/* delete line capabilities. This is not relevant for the PC    */
  1177. X/* version of curses, and thus nothing is done.            */
  1178. X/****************************************************************/
  1179. X
  1180. Xvoid idlok()
  1181. X  {
  1182. X  } /* idlok */
  1183. X
  1184. X/****************************************************************/
  1185. X/* Clearok() marks window 'win' to cause screen clearing and    */
  1186. X/* redraw the next time a refresh is done.            */
  1187. X/****************************************************************/
  1188. X
  1189. Xvoid clearok(win, flag)
  1190. X  WINDOW    *win;
  1191. X  bool         flag;
  1192. X  {
  1193. X  if (win == curscr)
  1194. X    _cursvar.tmpwin->_clear = flag;
  1195. X  else
  1196. X    win->_clear = flag;
  1197. X  } /* clearok */
  1198. X
  1199. X/****************************************************************/
  1200. X/* Leaveok() marks window 'win' to allow the update routines    */
  1201. X/* to leave the hardware cursor where it happens to be at the    */
  1202. X/* end of update. Usually used in combination with cursoff().    */
  1203. X/****************************************************************/
  1204. X
  1205. Xvoid leaveok(win, flag)
  1206. X  WINDOW    *win;
  1207. X  bool         flag;
  1208. X  {
  1209. X  win->_leave = flag;
  1210. X  } /* leaveok */
  1211. X
  1212. X/****************************************************************/
  1213. X/* Scrollok() marks window 'win' to allow the scrolling region    */
  1214. X/* of it to actually scroll.                    */
  1215. X/****************************************************************/
  1216. X
  1217. Xvoid scrollok(win, flag)
  1218. X  WINDOW    *win;
  1219. X  bool         flag;
  1220. X  {
  1221. X  win->_scroll = flag;
  1222. X  } /* scrollok */
  1223. X
  1224. X/****************************************************************/
  1225. X/* Nodelay() marks the window to make character input non-    */
  1226. X/* waiting, i.e. if there is no character to get, -1 will be    */
  1227. X/* returned.                            */
  1228. X/****************************************************************/
  1229. X
  1230. Xvoid nodelay(win, flag)
  1231. X  WINDOW    *win;
  1232. X  bool         flag;
  1233. X  {
  1234. X  win->_nodelay = flag;
  1235. X  } /* nodelay */
  1236. X
  1237. X/****************************************************************/
  1238. X/* Keypad() marks window 'win' to use the special keypad mode.    */
  1239. X/****************************************************************/
  1240. X
  1241. Xvoid keypad(win, flag)
  1242. X  WINDOW    *win;
  1243. X  bool         flag;
  1244. X  {
  1245. X  win->_keypad = flag;
  1246. X  } /* keypad */
  1247. X
  1248. X/****************************************************************/
  1249. X/* Meta() allows use of any alternate character set allowed by    */
  1250. X/* the terminal. We always allow this on the PC, so this one    */
  1251. X/* does nothing.                        */
  1252. X/****************************************************************/
  1253. X
  1254. Xvoid meta()
  1255. X  {
  1256. X  } /* meta */
  1257. X
  1258. X/****************************************************************/
  1259. X/* Cursoff() turns off the hardware cursor.            */
  1260. X/****************************************************************/
  1261. X
  1262. Xvoid cursoff()
  1263. X  {
  1264. X  if (!hasold)
  1265. X    {
  1266. X    oldmode = _cursesgcmode();        /* get old cursor type */
  1267. X    hasold = TRUE;
  1268. X    }
  1269. X  _cursescmode(31,30);            /* turn it off */
  1270. X  } /* cursoff */
  1271. X
  1272. X/****************************************************************/
  1273. X/* Curson() turns on the hardware cursor.            */
  1274. X/****************************************************************/
  1275. X
  1276. Xvoid curson()
  1277. X  {
  1278. X  if (hasold)
  1279. X    {
  1280. X    _cursescmode(oldmode >> 8,oldmode);
  1281. X    hasold = FALSE;
  1282. X    }
  1283. X  } /* curson */
  1284. END_OF_FILE
  1285. if test 4288 -ne `wc -c <'options.c'`; then
  1286.     echo shar: \"'options.c'\" unpacked with wrong size!
  1287. fi
  1288. # end of 'options.c'
  1289. fi
  1290. if test -f 'overlay.c' -a "${1}" != "-c" ; then 
  1291.   echo shar: Will not clobber existing file \"'overlay.c'\"
  1292. else
  1293. echo shar: Extracting \"'overlay.c'\" \(3687 characters\)
  1294. sed "s/^X//" >'overlay.c' <<'END_OF_FILE'
  1295. X/****************************************************************/
  1296. X/* Overlay() and overwrite() functions of the PCcurses package    */
  1297. X/*                                */
  1298. X/****************************************************************/
  1299. X/* This version of curses is based on ncurses, a curses version    */
  1300. X/* originally written by Pavel Curtis at Cornell University.    */
  1301. X/* I have made substantial changes to make it run on IBM PC's,    */
  1302. X/* and therefore consider myself free to make it public domain.    */
  1303. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1304. X/****************************************************************/
  1305. X/* 1.0:    Release:                    870515    */
  1306. X/* 1.2:    Max limits off by 1. Fixed thanks to S. Creps:    881002    */
  1307. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  1308. X/****************************************************************/
  1309. X
  1310. X#include <curses.h>
  1311. X#include <curspriv.h>
  1312. X
  1313. Xchar _curses_overlay_rcsid[] = "@(#)overlay.c v1.3 - 881005";
  1314. X
  1315. X/****************************************************************/
  1316. X/* Overlay() overwrites 'win1' upon 'win2', with origins alig-    */
  1317. X/* ned. Overlay is transparent; blanks from 'win1' are not    */
  1318. X/* copied to 'win2'.                        */
  1319. X/****************************************************************/
  1320. X
  1321. Xvoid overlay(win1, win2)
  1322. X  WINDOW    *win1, *win2;
  1323. X  {
  1324. X  int        *minchng;
  1325. X  int        *maxchng;
  1326. X  int        *w1ptr;
  1327. X  int        *w2ptr;
  1328. X  int         attrs;
  1329. X  int         col;
  1330. X  int         line;
  1331. X  int         last_line;
  1332. X  int         last_col;
  1333. X
  1334. X  last_col = min(win1->_maxx, win2->_maxx) - 1;
  1335. X  last_line = min(win1->_maxy, win2->_maxy) - 1;
  1336. X  attrs = win2->_attrs & ATR_MSK;
  1337. X  minchng = win2->_minchng;
  1338. X  maxchng = win2->_maxchng;
  1339. X
  1340. X  for(line = 0;  line <= last_line;  line++)
  1341. X    {
  1342. X    register short   fc, lc;
  1343. X    w1ptr = win1->_line[line];
  1344. X    w2ptr = win2->_line[line];
  1345. X    fc = _NO_CHANGE;
  1346. X    for(col = 0;  col <= last_col;  col++)
  1347. X      {
  1348. X      if ((*w1ptr & CHR_MSK) != ' ')
  1349. X    {
  1350. X    *w2ptr = (*w1ptr & CHR_MSK) | attrs;
  1351. X    if (fc == _NO_CHANGE)
  1352. X      fc = col;
  1353. X    lc = col;
  1354. X    } /* if */
  1355. X      w1ptr++;
  1356. X      w2ptr++;
  1357. X      } /* for */
  1358. X
  1359. X    if (*minchng == _NO_CHANGE)
  1360. X      {
  1361. X      *minchng = fc;
  1362. X      *maxchng = lc;
  1363. X      } /* if */
  1364. X    else
  1365. X      if (fc != _NO_CHANGE)
  1366. X    {
  1367. X    if (fc < *minchng)
  1368. X      *minchng = fc;
  1369. X    if (lc > *maxchng)
  1370. X      *maxchng = lc;
  1371. X    } /* else if */
  1372. X    minchng++;
  1373. X    maxchng++;
  1374. X    } /* for */
  1375. X  } /* overlay */
  1376. X
  1377. X/****************************************************************/
  1378. X/* Overwrite() overwrites 'win1' upon 'win2', with origins    */
  1379. X/* aligned. Overwrite is non-transparent; blanks from 'win1'    */
  1380. X/* are copied to 'win2'.                    */
  1381. X/****************************************************************/
  1382. X
  1383. Xvoid    overwrite(win1, win2)
  1384. X  WINDOW    *win1, *win2;
  1385. X  {
  1386. X  int        *minchng;
  1387. X  int        *maxchng;
  1388. X  int        *w1ptr;
  1389. X  int        *w2ptr;
  1390. X  int         attrs;
  1391. X  int         col;
  1392. X  int         line;
  1393. X  int         last_line;
  1394. X  int         last_col;
  1395. X
  1396. X  last_col = min(win1->_maxx, win2->_maxx) - 1;
  1397. X  last_line = min(win1->_maxy, win2->_maxy) - 1;
  1398. X  attrs = win2->_attrs & ATR_MSK;
  1399. X  minchng = win2->_minchng;
  1400. X  maxchng = win2->_maxchng;
  1401. X
  1402. X  for(line = 0;  line <= last_line;  line++)
  1403. X    {
  1404. X    register short   fc, lc;
  1405. X
  1406. X    w1ptr = win1->_line[line];
  1407. X    w2ptr = win2->_line[line];
  1408. X    fc = _NO_CHANGE;
  1409. X
  1410. X    for(col = 0;  col <= last_col;  col++)
  1411. X      {
  1412. X      if ((*w1ptr & CHR_MSK) != (*w2ptr & CHR_MSK))
  1413. X    {
  1414. X    *w2ptr = (*w1ptr & CHR_MSK) | attrs;
  1415. X
  1416. X    if (fc == _NO_CHANGE)
  1417. X      fc = col;
  1418. X    lc = col;
  1419. X    } /* if */
  1420. X
  1421. X      w1ptr++;
  1422. X      w2ptr++;
  1423. X      } /* for */
  1424. X
  1425. X    if (*minchng == _NO_CHANGE)
  1426. X      {
  1427. X      *minchng = fc;
  1428. X      *maxchng = lc;
  1429. X      } /* if */
  1430. X    else
  1431. X      if (fc != _NO_CHANGE)
  1432. X    {
  1433. X    if (fc < *minchng)
  1434. X      *minchng = fc;
  1435. X    if (lc > *maxchng)
  1436. X      *maxchng = lc;
  1437. X    } /* else if */
  1438. X    minchng++;
  1439. X    maxchng++;
  1440. X    } /* for */
  1441. X  } /* overwrite */
  1442. END_OF_FILE
  1443. if test 3687 -ne `wc -c <'overlay.c'`; then
  1444.     echo shar: \"'overlay.c'\" unpacked with wrong size!
  1445. fi
  1446. # end of 'overlay.c'
  1447. fi
  1448. if test -f 'refresh.c' -a "${1}" != "-c" ; then 
  1449.   echo shar: Will not clobber existing file \"'refresh.c'\"
  1450. else
  1451. echo shar: Extracting \"'refresh.c'\" \(3441 characters\)
  1452. sed "s/^X//" >'refresh.c' <<'END_OF_FILE'
  1453. X/****************************************************************/
  1454. X/* Wrefresh() and wnoutrefresh() routines of the PCcurses    */
  1455. X/* package                            */
  1456. X/*                                */
  1457. X/****************************************************************/
  1458. X/* This version of curses is based on ncurses, a curses version    */
  1459. X/* originally written by Pavel Curtis at Cornell University.    */
  1460. X/* I have made substantial changes to make it run on IBM PC's,    */
  1461. X/* and therefore consider myself free to make it public domain.    */
  1462. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1463. X/****************************************************************/
  1464. X/* 1.0:    Release:                    870515    */
  1465. X/* 1.2:    Max limits off by 1. Fixed thanks to S. Creps:    881002    */
  1466. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  1467. X/****************************************************************/
  1468. X
  1469. X#include <curses.h>
  1470. X#include <curspriv.h>
  1471. X
  1472. Xchar _curses_refresh_rcsid[] = "@(#)refresh.c v1.3 - 881005";
  1473. X
  1474. X/****************************************************************/
  1475. X/* Wrefresh() updates window win's area of the physical screen.    */
  1476. X/****************************************************************/
  1477. X
  1478. Xvoid wrefresh(win)
  1479. X  WINDOW    *win;
  1480. X  {
  1481. X  if (win == curscr)
  1482. X    curscr->_clear = TRUE;
  1483. X  else
  1484. X    wnoutrefresh(win);
  1485. X  doupdate();
  1486. X  } /* wrefresh */
  1487. X
  1488. X/****************************************************************/
  1489. X/* Wnoutrefresh() updates the image of the desired screen,    */
  1490. X/* without doing physical update (copies window win's image to    */
  1491. X/* the _cursvar.tmpwin window, which is hidden from the user).    */
  1492. X/****************************************************************/
  1493. X
  1494. Xvoid wnoutrefresh(win)
  1495. X  register WINDOW    *win;
  1496. X  {
  1497. X  register int      *dst;            /* start destination in temp window */
  1498. X  register int    *end;            /* end destination in temp window */
  1499. X  register int    *src;            /* source in user window */
  1500. X  register int     first;        /* first changed char on line */
  1501. X  register int     last;        /* last changed char on line */
  1502. X  static   WINDOW *nscr;
  1503. X  static   int       begy;        /* window's place on screen */
  1504. X  static   int       begx;
  1505. X  static   int       i;
  1506. X  static   int       j;
  1507. X
  1508. X  nscr = _cursvar.tmpwin;
  1509. X  begy = win->_begy;
  1510. X  begx = win->_begx;
  1511. X
  1512. X  for (i=0, j=begy; i < win->_maxy; i++, j++)
  1513. X    {
  1514. X    if (win->_minchng[i] != _NO_CHANGE)
  1515. X      {
  1516. X      first = win->_minchng[i];
  1517. X      last  = win->_maxchng[i];
  1518. X      dst   = &(nscr->_line[j][begx + first]);
  1519. X      end   = &(nscr->_line[j][begx + last]);
  1520. X      src   = &(win->_line[i][first]);
  1521. X
  1522. X      while (dst <= end)         /* copy user line to temp window */
  1523. X    *dst++ = *src++;
  1524. X
  1525. X      first += begx;            /* nscr's min/max change positions */
  1526. X      last  += begx;
  1527. X
  1528. X      if ((nscr->_minchng[j] == _NO_CHANGE)||(nscr->_minchng[j] > first))
  1529. X    nscr->_minchng[j] = first;
  1530. X      if (last > nscr->_maxchng[j])
  1531. X    nscr->_maxchng[j] = last;
  1532. X      
  1533. X      win->_minchng[i] = _NO_CHANGE;    /* updated now */
  1534. X      } /* if */
  1535. X    win->_maxchng[i] = _NO_CHANGE;    /* updated now */
  1536. X    } /* for */
  1537. X
  1538. X  if (win->_clear)
  1539. X    {
  1540. X    win->_clear = FALSE;
  1541. X    nscr->_clear = TRUE;
  1542. X    } /* if */
  1543. X
  1544. X  if (!win->_leave)
  1545. X    {
  1546. X    nscr->_cury = win->_cury + begy;
  1547. X    nscr->_curx = win->_curx + begx;
  1548. X    } /* if */
  1549. X  } /* wnoutrefresh */
  1550. X
  1551. X/****************************************************************/
  1552. X/* Refresh() updates stdscr's area of the physical screen.    */
  1553. X/****************************************************************/
  1554. X
  1555. Xvoid refresh()
  1556. X  {
  1557. X  wrefresh(stdscr);
  1558. X  } /* refresh */
  1559. END_OF_FILE
  1560. if test 3441 -ne `wc -c <'refresh.c'`; then
  1561.     echo shar: \"'refresh.c'\" unpacked with wrong size!
  1562. fi
  1563. # end of 'refresh.c'
  1564. fi
  1565. if test -f 'setmode.c' -a "${1}" != "-c" ; then 
  1566.   echo shar: Will not clobber existing file \"'setmode.c'\"
  1567. else
  1568. echo shar: Extracting \"'setmode.c'\" \(3268 characters\)
  1569. sed "s/^X//" >'setmode.c' <<'END_OF_FILE'
  1570. X/****************************************************************/
  1571. X/* Terminal mode routines of the PCcurses package.        */
  1572. X/*                                */
  1573. X/****************************************************************/
  1574. X/* This version of curses is based on ncurses, a curses version    */
  1575. X/* originally written by Pavel Curtis at Cornell University.    */
  1576. X/* I have made substantial changes to make it run on IBM PC's,    */
  1577. X/* and therefore consider myself free make it public domain.    */
  1578. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1579. X/****************************************************************/
  1580. X/* BUT: this particular module was written by            */
  1581. X/*    N. Dean Pentcheff  (dean@violet.berkeley.edu)        */
  1582. X/* It provides PC Curses versions of:                */
  1583. X/*    reset_prog_mode();                    */
  1584. X/*    reset_shell_mode();                    */
  1585. X/*    set_prog_mode();                    */
  1586. X/*    set_shell_mode();                    */
  1587. X/*                                */
  1588. X/* B. Larsson took the liberty to modify its style slightly    */
  1589. X/* when incorporating it into PCcurses v.1.2. The routines in    */
  1590. X/* this module do a similar thing to savetty() and resetty().    */
  1591. X/****************************************************************/
  1592. X/* 1.2:    Style clean-up, rcsid[] string for maintenance:    881002    */
  1593. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  1594. X/****************************************************************/
  1595. X
  1596. X#include <curses.h>
  1597. X#include <curspriv.h>
  1598. X
  1599. Xstruct cttyset
  1600. X  {
  1601. X  bool    been_set;
  1602. X  bool    oautocr;
  1603. X  bool    ocbreak;
  1604. X  bool    oecho;
  1605. X  bool    oraw;
  1606. X  };
  1607. X    
  1608. Xchar _curses_setmode_rcsid[] = "@(#)setmode.c v1.3 - 881005";
  1609. X
  1610. Xstatic    struct cttyset sh_tty = {FALSE};/* tty modes for shell_mode */
  1611. Xstatic    struct cttyset pr_tty = {FALSE};/* tty modes for prog_mode  */
  1612. X
  1613. X/****************************************************************/
  1614. X/* Def_prog_mode() saves the current tty status, to be recalled    */
  1615. X/* later by reset_prog_mode.                    */
  1616. X/****************************************************************/
  1617. X
  1618. Xvoid def_prog_mode()
  1619. X  {
  1620. X  pr_tty.been_set = TRUE;
  1621. X  pr_tty.oautocr = _cursvar.autocr;
  1622. X  pr_tty.ocbreak = _cursvar.cbreak;
  1623. X  pr_tty.oecho    = _cursvar.echo;
  1624. X  pr_tty.oraw    = _cursvar.raw;
  1625. X  } /* def_prog_mode */
  1626. X
  1627. X/****************************************************************/
  1628. X/* Reset_prog_mode() resets tty modes to the values saved in a    */
  1629. X/* call to def_prog_mode.                    */
  1630. X/****************************************************************/
  1631. X
  1632. Xvoid reset_prog_mode()
  1633. X  {
  1634. X  if (pr_tty.been_set == TRUE)
  1635. X    {
  1636. X    _cursvar.autocr    = pr_tty.oautocr;
  1637. X    _cursvar.cbreak    = pr_tty.ocbreak;
  1638. X    _cursvar.echo    = pr_tty.oecho;
  1639. X    _cursvar.raw    = pr_tty.oraw;
  1640. X    } /* if */
  1641. X  } /* reset_prog_mode */
  1642. X
  1643. X/****************************************************************/
  1644. X/* Def_shell_mode() saves the tty status, to be recalled by    */
  1645. X/* reset_shell_mode. A noop in PCcurses.            */
  1646. X/****************************************************************/
  1647. X
  1648. Xvoid def_shell_mode()
  1649. X  {
  1650. X  } /* def_shell_mode */
  1651. X
  1652. X/****************************************************************/
  1653. X/* Reset_shell_mode() resets the tty status to the status it    */
  1654. X/* had before curses began.                    */
  1655. X/****************************************************************/
  1656. X
  1657. Xvoid reset_shell_mode()
  1658. X  {
  1659. X  _cursvar.autocr    = TRUE;
  1660. X  _cursvar.cbreak    = FALSE;
  1661. X  _cursvar.echo    = TRUE;
  1662. X  _cursvar.raw    = FALSE;
  1663. X  } /* reset_shell_mode */
  1664. END_OF_FILE
  1665. if test 3268 -ne `wc -c <'setmode.c'`; then
  1666.     echo shar: \"'setmode.c'\" unpacked with wrong size!
  1667. fi
  1668. # end of 'setmode.c'
  1669. fi
  1670. if test -f 'setterm.c' -a "${1}" != "-c" ; then 
  1671.   echo shar: Will not clobber existing file \"'setterm.c'\"
  1672. else
  1673. echo shar: Extracting \"'setterm.c'\" \(3007 characters\)
  1674. sed "s/^X//" >'setterm.c' <<'END_OF_FILE'
  1675. X/****************************************************************/
  1676. X/* Raw(), noraw(), echo(), noecho(), nl(), nonl(),  cbreak(),    */
  1677. X/* nocbreak(), crmode(), nocrmode() and refrbrk() routines of    */
  1678. X/* the PCcurses package.                    */
  1679. X/*                                */
  1680. X/****************************************************************/
  1681. X/* This version of curses is based on ncurses, a curses version    */
  1682. X/* originally written by Pavel Curtis at Cornell University.    */
  1683. X/* I have made substantial changes to make it run on IBM PC's,    */
  1684. X/* and therefore consider myself free to make it public domain.    */
  1685. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1686. X/****************************************************************/
  1687. X/* 1.0:    Release:                    870515    */
  1688. X/* 1.2:    Rcsid[] string for maintenance:            881002    */
  1689. X/* 1.3:    MSC -W3, Turbo'C' -w -w-pro checkes:        881005    */
  1690. X/****************************************************************/
  1691. X
  1692. X#include <curses.h>
  1693. X#include <curspriv.h>
  1694. X
  1695. Xchar _curses_setterm_rcsid[] = "@(#)setterm.c v1.3 - 881005";
  1696. X
  1697. X/****************************************************************/
  1698. X/* Raw() and noraw() sets or clears raw mode.            */
  1699. X/****************************************************************/
  1700. X
  1701. Xvoid  raw()
  1702. X  {
  1703. X  _cursvar.raw = TRUE;
  1704. X  _cursesscb(FALSE);            /* disallow ^BREAK on disk I/O */
  1705. X  flushinp();
  1706. X  } /* raw */
  1707. X
  1708. Xvoid  noraw()
  1709. X  {
  1710. X  _cursvar.raw = FALSE;
  1711. X  _cursesscb(_cursvar.orgcbr);        /* restore original ^BREAK status */
  1712. X  } /* noraw */
  1713. X
  1714. X/****************************************************************/
  1715. X/* Echo() and noecho() sets or clears echo mode.        */
  1716. X/****************************************************************/
  1717. X
  1718. Xvoid  echo()
  1719. X  {
  1720. X  _cursvar.echo = TRUE;
  1721. X  } /* echo */
  1722. X
  1723. Xvoid  noecho()
  1724. X  {
  1725. X  _cursvar.echo = FALSE;
  1726. X  } /* noecho */
  1727. X
  1728. X/****************************************************************/
  1729. X/* Nl() and nonl() sets or clears autocr mapping mode.        */
  1730. X/****************************************************************/
  1731. X
  1732. Xvoid  nl()
  1733. X  {
  1734. X  _cursvar.autocr = TRUE;
  1735. X  } /* nl */
  1736. X
  1737. Xvoid  nonl()
  1738. X  {
  1739. X  _cursvar.autocr = FALSE;
  1740. X  } /* nonl */
  1741. X
  1742. X/****************************************************************/
  1743. X/* Cbreak(), nocbreak(), crmode() amd nocrmode()  sets or    */
  1744. X/* clears cbreak mode.                        */
  1745. X/****************************************************************/
  1746. X
  1747. Xvoid  cbreak()
  1748. X  {
  1749. X  _cursvar.cbreak = TRUE;
  1750. X  } /* cbreak */
  1751. X
  1752. Xvoid  nocbreak()
  1753. X  {
  1754. X  _cursvar.cbreak = FALSE;
  1755. X  } /* nocbreak */
  1756. X
  1757. Xvoid  crmode()
  1758. X  {
  1759. X  _cursvar.cbreak = TRUE;
  1760. X  } /* crmode */
  1761. X
  1762. Xvoid  nocrmode()
  1763. X  {
  1764. X  _cursvar.cbreak = FALSE;
  1765. X  } /* nocrmode */
  1766. X
  1767. X/****************************************************************/
  1768. X/* Refrbrk() sets or unsets the screen refresh break flag. If    */
  1769. X/* this flag is set, and there is any input available, any    */
  1770. X/* screen refresh will be prematurely terminated, anticipating    */
  1771. X/* more screen updates. This flag is FALSE by default.        */
  1772. X/****************************************************************/
  1773. X
  1774. Xvoid    refrbrk(bf)
  1775. X  bool    bf;
  1776. X  {
  1777. X  _cursvar.refrbrk = bf;
  1778. X  } /* refrbrk */
  1779. END_OF_FILE
  1780. if test 3007 -ne `wc -c <'setterm.c'`; then
  1781.     echo shar: \"'setterm.c'\" unpacked with wrong size!
  1782. fi
  1783. # end of 'setterm.c'
  1784. fi
  1785. echo shar: End of archive 2 \(of 5\).
  1786. cp /dev/null ark2isdone
  1787. MISSING=""
  1788. for I in 1 2 3 4 5 ; do
  1789.     if test ! -f ark${I}isdone ; then
  1790.     MISSING="${MISSING} ${I}"
  1791.     fi
  1792. done
  1793. if test "${MISSING}" = "" ; then
  1794.     echo You have unpacked all 5 archives.
  1795.     rm -f ark[1-9]isdone
  1796. else
  1797.     echo You still need to unpack the following archives:
  1798.     echo "        " ${MISSING}
  1799. fi
  1800. ##  End of shell archive.
  1801. exit 0
  1802.